Computer systems such as personal computers perform various tasks when the computer system is booted. These tasks may include initialization tasks which initialize various system components to prepare them for use, and diagnostic tests of these and other components to determine that they are functioning correctly. The execution of these tasks is referred to as a power-on self test ("POST"), because the tasks are performed when the computer system is "powered on." When the computer system is powered on, a POST component executes and performs the power-on self testing. The POST component includes various POST tasks, and typically includes a POST engine to invoke the various POST tasks in sequence. Alternately, the tasks can be invoked without the use of a separate POST engine. The tasks are software routines that each perform a specific testing or initialization function. The POST component performs these tasks before the main portion of the operating system is loaded, and thus it often cannot send information to conventional I/O devices such as the display device. If the POST component cannot send information to these I/O devices, then it cannot easily report its progress or status to a user.
Even if the conventional I/O devices are available to report POST status information, they often cannot provide sufficient information. Some users, such as developers, typically need status information about all POST tasks, but conventional I/O devices will often display information related to only a few of the POST tasks. In addition, some conventional I/O devices only display a single line of POST task status information, and such single-line display devices can therefore only display information for the most recent POST task. Moreover, since POST tasks can be performed in a fraction of a second, status information displayed on a single-line display device for one task may be replaced by status information for the next task so quickly that a human observer will not even be able to perceive it. Finally, the POST component typically reports the POST status using tokens. Each POST task is typically associated with a unique token (often a number or byte code) that is associated with a predefined message related to the task. For example, the task of testing memory may have an associated one-byte token with a value of 20 (i.e. binary 0010100) and an associated message such as "POST: Start of First Memory Test." If the conventional I/O device cannot display the message associated with the token, the display of the token itself will not be useful unless an observer knows the predefined message associated with the token.
Some computer systems provide a specialized reporting mechanism is by which the POST component can report its status to a user of the computer system. These computer systems use specialized external status monitors that are attached to the computer system. The external status monitors include an information output device which is typically a display, and are typically connected to the computer systems via a specified I/O port. The external status monitors can also include a read-only memory ("ROM"), a random access memory ("RAM"), and a central processing unit ("CPU"). Using such an external status monitor, a user can view the progress of the computer system POST even though the conventional I/O devices may not be able to display sufficient status information. Since the external status monitors are separate from the computer systems being monitored, they can be initialized and ready to receive information before the POST tasks begin. External status monitors also can have multiple-line displays that can display information about multiple POST tasks at the same time. In addition, the external status monitors can display useful information about each POST task for which status is reported because they receive the predefined tokens that are reported by the POST component and display the predefined message for the token rather than merely the token. For example, when the POST component starts testing memory, the external status monitor can display a message such as "POST: Start of First Memory Test" rather than 20 (or binary 0010100).
To implement the testing and reporting, the POST component maintains a POST Task Table. The POST Task Table contains an entry for each task to be performed, with each entry containing the token for the task and a reference to the routine that performs the task. During the power-on self test, the POST engine retrieves each entry in sequence, invokes the referenced routine, and sends the token to the external status monitor. When the external status monitor receives the token, the external status monitor displays the predefined message to the user. The external status monitor can display these messages because its ROM contains a POST Message Table which maps predefined tokens to text messages which are associated with the task associated with the token. Since the ROM cannot easily be updated once the external status monitor is shipped to a customer as part of a computer system, the POST Message Table reflects tokens that were defined at the time when the ROM was programmed.
Data is typically passed between the computer system CPU and the external status monitor through an I/O port. However, some external status monitors have been designed so that they can use RAM on the computer system or external status monitor, referred to as a POST RAM buffer, to store tokens that are passed. In this situation, the POST component stores the tokens into the POST RAM as it performs the tasks, and the external status monitor retrieves those tokens from the POST RAM. When the POST component starts a new task, it writes the token for that task to the I/O poll assigned to the external status monitor, causing that token to be stored in the next sequential location in the POST RAM. When the external status monitor detects (e.g., by polling) that another token has been stored in the POST RAM, the external status monitor retrieves the message associated with the token from its POST Message Table in ROM. The external status monitor then displays the retrieved message on its display device to apprise the user of the progress of the power-on self test. External status monitors are typically implemented using a microcontroller device that was developed to assist the monitoring of a computer system during the power-on self testing. One such device is the LM78 developed by National Semiconductor, which has a 32-byte POST RAM buffer which can be used to store information sent from the POST component to the external status monitor.
Despite this capability to pass predefined tokens and display predefined messages, the current POST components and external status monitors have serious drawbacks. In particular, only the predefined messages stored in the ROM of the external status monitors can be displayed. If, after the external status monitor ROM is programmed, new POST tasks (with new messages) are added to the POST component or if existing messages are changed, the external status monitor cannot display these new messages. For example, if a new POST task is added to test the level 2 cache, then a new entry in the POST Task Table is added. This new entry would contain a new token associated with the test of the level 2 cache and a reference to the routine to perform that test. However, the POST Message Table of the external status monitor has no message associated with this new token. Thus, the external status monitor could not display a meaningful message indicating that a test of the level 2 cache is being performed. To display a meaningful message, the ROM would need to be updated or replaced so that the POST Message Table contains the new token and new message. Similarly, it may be necessary to change the message for an existing POST task, which would also require a change to the POST Message Table. In either case, it is difficult and expensive to update the POST Message Table. Thus, the external status monitors typically can only display a fixed set of messages that were defined when the POST Message Table was initially generated.